import babel from '@rollup/plugin-babel'
import clear from 'rollup-plugin-clear'
import terser from '@rollup/plugin-terser'
import html from 'rollup-plugin-generate-html-template'
import resolve from '@rollup/plugin-node-resolve'
import replace from '@rollup/plugin-replace'
import { liveServer } from 'rollup-plugin-live-server'

// 该插件依赖@vue/compiler-sfc，已装
import vue from 'rollup-plugin-vue'
import postcss from 'rollup-plugin-postcss'
import cssnano from 'cssnano'
import autoprefixer from 'autoprefixer'
import alias from '@rollup/plugin-alias';

console.log(process.env.NODE_ENV, 'process.env.NODE_ENV')

const isProduction = process.env.NODE_ENV === 'production'

export default {
  // input: "src/index.js",
  input: {
    // 名称取决于key
    index: "./src/index.js",
    // main:"./src/main.js"
  },
  output: {
    // 如果多入口，必须指定dir，指定存放目录
    dir: "dist",
    // 如果是单入口，就必须通过file指定打包文件名称
    // file: "dist/index.js",
    // 模块化方案
    format: "esm",//使用cjs会报exports is not defined

    name: 'MyBundle', //umd必须加模块名称

    // 拆分子文件（chunk）
    // manualChunks: {
    //   // key 自己定义，关联拆分子文件的名称
    //   "vue": ['vue'],
    //   "vue-router": ['vue-router']
    // }
    manualChunks:(id)=>{
      // id：文件路径
      if (id.includes('node_modules')) {
        return 'vendor';
      }
    },
    sourcemap: true
  },
  // 注册插件
  plugins: [
    // 处理vue文件
    vue(),
    postcss({
      // 抽成地理一个css文件
      extract: true,
      // autoprefixer:兼容，添加需要兼容的版本
      // cssnano:  将css进行压缩
      plugins: [autoprefixer(), isProduction ? cssnano() : null]
    }),
    babel({
      babelHelpers: "runtime", //添加了@babel/runtime插件，必须配置runtime
      exclude: "node_modules/**",
      extensions: ['.js', '.jsx', '.vue']
    }),
    clear({
      // required, point out which directories should be clear.
      targets: ['dist'],
      // 以监视模式调用插件，需要配置rollup --watch / rollup -w
      watch: true, // default: false
    }),
    // 将使用到的第三方依赖代码打包进打包代码中
    resolve(),
    // 有识别不了的，替换掉
    replace({
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
      preventAssignment: true
    }),
    isProduction ? terser() : null,
    // 根据模板html生成一个html页面，并自动注入打包结果（js/css）
    html({
      // 模板文件
      template: "./src/index.html",
      // 最终生成的html文件
      target: "index.html",
      attrs: ['type="module"']
    }),
    // 开发服务器
    liveServer({
      port: 8001,
      host: "0.0.0.0",
      root: "dist", //根目录
      file: "index.html",  //默认页面
      open: true, // 是否自动开启浏览器
    }),
    alias({
      entries: {
        '@': './src',
      }
    })
  ],
  // 指定排除项
  external: []
}
